from urllib.parse import urlunparse,urlunsplit,urljoin

"""
urlunparse 用于将6个组成部分组合成一个完整的URL字符串。
这6个部分依次为：

scheme：协议（如 'http', 'https'）
netloc：网络位置（如 'www.example.com:80'）
path：路径（如 '/index.html'）
params：参数（较少用，路径参数，如 ';type=abc'）
query：查询字符串（如 'a=1&b=2'）
fragment：锚点、片段标识符（如 'section1'）

"""

# 示例 拼接完整的url
data = ['https', 'www.baidu.com', 'index.html', 'user', 'a=6', 'comment']
print(urlunparse(data)) ## https://www.baidu.com/index.html;user?a=6#comment



"""
 urlunsplit 与 urlunparse 方法类似，它也是将链接各个部分组合成完整链接的方法，传入的参数也是一个可迭代对象，例如列表、元组等，唯一的区别是长度必须为 5
"""

# 示例 拼接完整的url
data = ['https', 'www.baidu.com', 'index.html',  'a=6', 'comment']
print(urlunsplit(data)) ## https://www.baidu.com/index.html?a=6#comment



"""
生成链接还有另一个方法，那就是 urljoin 方法。我们可以提供一个 base_url（基础链接）作为第一个参数，将新的链接作为第二个参数，该方法会分析 base_url 的 scheme、netloc 和 path 这 3 个内容并对新链接缺失的部分进行补充，最后返回结果。
可以发现，base_url 提供了三项内容 scheme、netloc 和 path。如果这 3 项在新的链接里不存在，就予以补充；如果新的链接存在，就使用新的链接的部分。而 base_url 中的 params、query 和 fragment 是不起作用的。
"""
# 示例 拼接完整的url
print(urljoin('https://www.baidu.com', 'FAQ.html'))
print(urljoin('https://www.baidu.com', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('https://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('https://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html?question=2'))
print(urljoin('https://www.baidu.com?wd=abc', 'https://cuiqingcai.com/index.php'))
print(urljoin('https://www.baidu.com', '?category=2#comment')) # https://www.baidu.com?category=2#comment
print(urljoin('www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com#comment', '?category=2')) #www.baidu.com?category=2
